package com.wh.wisdomsite.xbox.utils.server;

import com.wh.wisdomsite.xbox.utils.properties.PropertiesToolMgr;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.Socket;


/**
 * 该方式是采用Scoket方式，  连接服务器方法，用于客户端和服务端数据通信
 * @Package com.wh.wisdomsite.xbox.utils.server
 * @author 谢泽鹏
 * @date 2014年10月14日 下午2:10:42
 * @Copyright 个人版权所有
 * @Company 贵州万华科技有限公司Copyright (c) 2014
 * @version V1.0
 */
public class connToserver_Scoket {


    private static final Log logger = LogFactory.getLog(connToserver_Scoket.class);


    /***
	 * 
	 * 客户端连接服务端，并获取服务端返回数据流信息
	 * @param requst  客户端向服务端传送请求串
	 * @return String 响应结果
	 */
    public static String clinetToServer(String requst){
    	//声明Socket对象
    	Socket socket = null;
    	//客户端获取服务端输入流
    	InputStream s_ips = null;
    	//客户端获取服务端输出流
    	OutputStream s_ops = null;
    	PrintWriter printWriter = null;
    	String json = null;
    	try{
    		//获取请求IP地址
    		String InetAddress = PropertiesToolMgr.getPropertiesByKey("InetAddress");
    		//获取请求端口
    		Integer dstPort = Integer.valueOf(PropertiesToolMgr.getPropertiesByKey("dstPort"));
    		//创建Socket对象, 外网IP，映射本机地址
    		socket = new Socket(InetAddress, dstPort);
			//获取服务端输入流
			s_ips = socket.getInputStream();
			//获取服务端输出流
			s_ops = socket.getOutputStream();

    		if(null != s_ops){
    			//客户端向服务端发送数据信息
    			printWriter = new PrintWriter(s_ops, true);
    			printWriter.println(requst);
    		}
    		if(null != s_ips){
    			//客户端接收服务器发送数据信息
    			BufferedReader reader = getBufferedReader(socket);
    			json  =  reader.readLine();
    		} 
    		return json;
    	}
    	catch(Exception e){
    		e.printStackTrace();
            logger.error("clinetToServer->>客户端连接服务端,进行数据通信失败！"  + e.getMessage());
    	}finally{
			try {
	    		if(null != s_ops){
	    			s_ops.close();
	    		}
	    		if(null != s_ips){
	    			s_ips.close();
	    		}
	    		if(null != socket){
	    			socket.close();
	    		}
			} catch (IOException e) {
				e.printStackTrace();
                logger.error("clinetToServer->>客户端连接服务端,关闭输入/输出流出现异常！"  + e.getMessage());
			}
    	}
		return null;
    }
    
    /**
     * 读取输入流
     * @param socket
     * @return BufferedReader   
     */
	public static BufferedReader getBufferedReader(Socket socket){
		InputStream socketIn = null;
		try{
			socketIn = socket.getInputStream();
			return new BufferedReader(new InputStreamReader(socketIn, "utf-8"));
		}catch(UnsupportedEncodingException e){
			e.printStackTrace();
            logger.error("getBufferedReader->>scoket读取InputStream出现异常！"  + e.getMessage());
		}catch (Exception e2) {
            logger.error("getBufferedReader->>scoket读取InputStream出现异常！"  + e2.getMessage());
			e2.printStackTrace();
		}
			return null;
	}
	
}
